package com.haiheng.module_main.fragment

import android.annotation.SuppressLint
import android.app.ScansManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import com.haiheng.common.dialog.StandardDialog
import com.haiheng.common.fragment.RouterFragment
import com.haiheng.library.log.LogUtils
import com.haiheng.library_base.adapter.BaseAdapter
import com.haiheng.library_base.dialog.LoadingDialog
import com.haiheng.library_base.model.ApplicationViewModel
import com.haiheng.library_base.model.BaseViewModel
import com.haiheng.library_base.msg.MsgCode
import com.haiheng.library_base.msg.MsgEvent
import com.haiheng.library_base.toast.ToastUtils
import com.haiheng.library_base.utils.FastClickUtil
import com.haiheng.module_main.R
import com.haiheng.module_main.adapter.BookListAdapter
import com.haiheng.module_main.databinding.SingleVolumeDeploymentFragmentBinding
import com.haiheng.module_main.mode.BookInfoViewModel
import com.haiheng.module_main.mode.DeploymentViewModel


/**
 *
 * @Des:单册上架
 * @Author: hwz
 * @Date:2023/6/14 0014
 * @Version: 1.0
 */
class SingleVolumeDeploymentFragment : RouterFragment() {
    private lateinit var binding: SingleVolumeDeploymentFragmentBinding
    private val viewMode: BookInfoViewModel by viewModels()
    private lateinit var deploymentViewModel: DeploymentViewModel
    private val bookListAdapter = BookListAdapter()
    val NON_EXTRA = 0 //无
    val ENTER_EXTRA = 1 //添加回车
    val BROADCAST_INPUT_MODE = 0 //广播模式
    val INPUTTEXT_INPUT_MODE = 1 //输入框模式
    private var inputmode: Int = INPUTTEXT_INPUT_MODE
    private var addExtra = NON_EXTRA
    private var mScansManager: ScansManager? = null

    //    private var broadcastReceiver: ScansReceiver? = null
    private lateinit var loadingDialog: LoadingDialog
    private var layerInfoSureDialog: StandardDialog? = null


    private val observer = Observer<MsgEvent> { msgEvent ->
        onMessageChange(msgEvent)
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = SingleVolumeDeploymentFragmentBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun initView() {
        deploymentViewModel = DeploymentViewModel(viewMode)
        loadingDialog = LoadingDialog(requireContext(), R.style.AvLoadingDialogStyle)
        binding.includeTile.tvTitle.setText("单册上架")
        binding.includeTile.ivBack.setOnClickListener {
            activity.navigateUp()
        }
//        initBroadcast()
        binding.includeTile.cbRignt.isChecked = false
        binding.includeIdentifyShelf.cbGetShelfNo.isChecked = true
        binding.includeTile.cbRignt.setOnClickListener {
            binding.includeTile.cbRignt.isChecked = true
            binding.includeIdentifyShelf.cbGetShelfNo.isChecked = false
//            mScansManager?.startScan()
        }
        binding.includeIdentifyShelf.cbGetShelfNo.setOnClickListener {
            binding.includeTile.cbRignt.isChecked = false
            binding.includeIdentifyShelf.cbGetShelfNo.isChecked = true
            mScansManager?.startScan()
        }

        binding?.rvBookList?.layoutManager = LinearLayoutManager(activity)
        binding?.rvBookList?.adapter = bookListAdapter
        bookListAdapter.setOnItemClickListener(object : BaseAdapter.OnItemClickListener {
            override fun onItemClick(holder: BaseAdapter.ViewBindHolder, position: Int) {
                var bookInfoBean = bookListAdapter.getItem(position)
                bookInfoBean.isSelect = !bookInfoBean.isSelect
                var isAllSelet = true
                for (b in bookListAdapter.getData()) {
                    if (!b.isSelect) {
                        isAllSelet = false
                        break
                    }
                }
                binding.includeBottom.cbAll.isChecked = isAllSelet
                bookListAdapter.notifyDataSetChanged()
            }
        })
        binding.includeBottom.cbAll.setOnClickListener {
            for (b in viewMode._bookListData.value!!) {
                b.isSelect = binding.includeBottom.cbAll.isChecked
            }
            bookListAdapter.notifyDataSetChanged()
        }
        binding.includeBottom.btnSubmit.setOnClickListener {//上架
            var layNo = binding.includeIdentifyShelf.etShelfNo.text.toString()
            if (layNo.isNotBlank()) {
                loadingDialog.setMessage(getString(R.string.text_shlf_ing))
                loadingDialog.show()
                deploymentViewModel.bookAssetLocation(layNo)
            } else {
                ToastUtils.showShort("层架号不能为空")
            }
        }
        binding.includeBottom.btnClear.setOnClickListener {
            viewMode._bookListData.postValue(listOf())
            bookListAdapter.getData().clear()
            bookListAdapter.notifyDataSetChanged()
        }

        binding.includeIdentifyShelf.etShelfNo.setOnEditorActionListener { v, keyCode, event ->
            LogUtils.e("ddddddd  keyCode${keyCode}")
            if (keyCode == EditorInfo.IME_ACTION_SEARCH) {
                binding.tvShelfNo.text = ""
                viewMode.getShelName(binding.includeIdentifyShelf.etShelfNo.text.toString())
                false
            }
            false
        }
    }

    override fun onResume() {
        super.onResume()
        observEven()
    }

    override fun onPause() {
        super.onPause()
        clearMsg()
        mScansManager?.persistMode = false
        mScansManager?.stopScan()
    }

    override fun initViewModel(): BaseViewModel? {
        viewMode.bookListData.observe(viewLifecycleOwner) {
            binding.tvBookNum.setText("数量：${it.size}")
            bookListAdapter.setNewData(it)

            var isAllSelet = true
            for (b in it) {
                if (!b.isSelect) {
                    isAllSelet = false
                    break
                }
            }
            binding.includeBottom.cbAll.isChecked = isAllSelet
        }
        viewMode.showMsg.observe(viewLifecycleOwner) {
            ToastUtils.showShort(it)
            loadingDialog.hide()
        }
        viewMode.layerInfo.observe(viewLifecycleOwner) {
            var content = "层架号：${it.outValue} \n名称：${it.name}"
            if (layerInfoSureDialog == null) {
                layerInfoSureDialog =
                    StandardDialog.newInstance().setTitle(getString(R.string.hint_layer_no))
                        .setContent(content)
                        .setOnDialogListener(object : StandardDialog.OnDialogClickListener {
                            override fun onConfirm(dialog: StandardDialog) {
                                binding.tvShelfNo.setText(it.name)
                                binding.includeIdentifyShelf.etShelfNo.setText(it.outValue)
                                binding.includeTile.cbRignt.performClick()
                                dialog.dismiss()
                            }

                            override fun onCancel(dialog: StandardDialog) {
                                dialog.dismiss()
                            }
                        })
            } else {
                layerInfoSureDialog?.setContent(content)
            }
            LogUtils.e("dddddddddd usAdd: ${layerInfoSureDialog?.isAdded}  isVisible:${layerInfoSureDialog?.isVisible}")
            if (!layerInfoSureDialog!!.isAdded) {
                layerInfoSureDialog?.show(childFragmentManager)
            }

        }
        return viewMode
    }

    private fun onMessageChange(msgEvent: MsgEvent?) {
        when (msgEvent?.code) {
            MsgCode.MSG_SCANS_BARCODE -> {
                if (FastClickUtil.isFaskMsg(msgEvent.msg, 200)) return //两次相同消息太快这不处理
                if (binding.includeIdentifyShelf.cbGetShelfNo.isChecked) {
                    if (layerInfoSureDialog?.isVisible == true)return
                    binding.includeIdentifyShelf.etShelfNo.setText(msgEvent.msg)
                    binding.tvShelfNo.text = ""
                    viewMode.getShelName(msgEvent.msg)
                }
                if (binding.includeTile.cbRignt.isChecked) {
                    viewMode.queryBookByAcs(msgEvent.msg)
                }
            }
        }
    }

    private fun observEven() {
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
            ApplicationViewModel.get().even.observe(this, observer)
        }
    }

    fun clearMsg() {
        if (ApplicationViewModel.get().even != null) {
            if (ApplicationViewModel.get().even.hasObservers()) {
                ApplicationViewModel.get().even.removeObserver(observer)
            }
        }
    }

    @SuppressLint("WrongConstant")
    override fun initLoad() {
        var manager = activity.getSystemService("scans")
        if (manager != null) {
            mScansManager = manager as ScansManager
            mScansManager?.persistMode = true
        }
    }

}